<?php
class User{
	// Hold an instance of the class

	private $nome=null;
	private $dataDeNascimento=null;
	private $pass='';
	private $cookie='';
	private $id=0;
	private $logado=false;
	private $dados=null; //dados que vem do tuga
	private static $_instance;
	private $parentescos=null;
	private $destinatariosARemover=array();
	private static $pedidoDeAlteracaoDeDadosPessoais=false;
	private static $pedidoDeAlteracaoDeMorada=false;
	private static $pedidoDeAlteracaoDeDocumentos=false;
	private $seccao=null;
	private $novaConta=null;
	public static function getPaises(){
		global $DbSite;
		$sql='select pai_codelite as id, pai_nombreusd as nome from officeschema.hd_paises;';
		return $DbSite->getall($sql);
	}
	public static function getCidades(){
		global $DbSite;
		$sql='select ciunumero as id, ciuciudad as nome
			from officeschema.ciudades
			join officeschema.beneficiarios on officeschema.beneficiarios.BnfPais=officeschema.ciudades.CiuPais';
		return $DbSite->getall($sql);
	}
	public function getCidadesPorDestinatario(){
		global $DbTuga;
		$sql='
			select ciunumero as id, ciuciudad as nome 
			from officeschema.ciudades
			join officeschema.beneficiarios on officeschema.beneficiarios.BnfPais=officeschema.ciudades.CiuPais
			where officeschema.beneficiarios.BnfNumero='.$_POST['destinatario'].'
			;';
		return $DbTuga->getall($sql);
	}
	public function getModosDePagamento(){
		global $DbTuga;
		$sql='select mp_id as id,mp_ModoPago as nome from officeschema.hd_modospago;';
		return $DbTuga->getall($sql);
	}
	public function getNovaConta(){
		return $this->novaConta;
	}
	public function setNovaConta($value){
		$this->novaConta=$value;
	}
	public function getSeccao(){
		return $this->seccao;
	}
	public function getBancosPorDestinatario(){
		global $DbTuga;
		//$_POST['destinatario'];
		$sql='
		select officeschema.hd_bancos.bp_IdBanco as id,officeschema.hd_bancos.bp_Name as nome
		from officeschema.hd_bancos
		join officeschema.hd_paises on officeschema.hd_paises.pai_CodElite =officeschema.hd_bancos.bp_Country
		join officeschema.beneficiarios on officeschema.hd_paises.pai_CodElite =officeschema.beneficiarios.BnfPais
		where officeschema.beneficiarios.BnfNumero='.$_POST['destinatario'];
		//echo $sql;
		return $DbTuga->getall($sql);
	}
	public function setSeccao($seccao){
		$this->seccao=$seccao;
	}
	public function saveAdicionarConta(){
		global $DbSite;
		$conta=$DbSite->quote($_POST['numeroDeConta']);
		$destinatario=$DbSite->quote($_POST['destinatario']);
		$agencia=$DbSite->quote($_POST['agencia']);
		$cidade=$DbSite->quote($_POST['localidade']);
		$banco=$DbSite->quote($_POST['banco']);

		$sql="
		insert into site.destinatario
		(idDestinatario,idUtilizador,accao,idConta,cidade,agencia,idbanco) value
		(".$destinatario.','.$this->id.",'adicionarConta',$conta,$cidade,$agencia,$banco);";
		return $DbSite->query($sql);
	}
	public function saveRemoverConta(){
		global $DbSite;
		$conta=$_POST['conta'];
		$destinatario=$_POST['destinatario'];
		$sql="
		insert into site.destinatario
		(idDestinatario,idUtilizador,accao,idConta)
		value (".$destinatario.','.$this->id.",'removerConta',$conta);";
		if($DbSite->query($sql)){
			return true;
		}else{
			return false;
		}
	}
	public function getDestinatariosARemover(){
		return $this->destinatariosARemover;
	}
	public function adicionaDestinatarioARemover($destinatario){
		array_push($this->destinatariosARemover,$destinatario);
	}
	public function saveRemoverDestinatario(){
		global $DbSite;
		//echo 'saveRemoverDestinatario';
		$destinatario=$_POST['removerDestinatario'];
		$sql="
		insert into site.destinatario
		(idDestinatario,idUtilizador,accao)
		value (".$destinatario.','.$this->id.",'remover');";
		if($DbSite->query($sql)){
			return true;
		}else{
			return false;
		}
	}
	public static function saveDestinatario($idUtilizador){
		global $DbSite;
		$destinatario=isset($_POST['actualizarDestinatario'])?$_POST['actualizarDestinatario']:0;

		$nomeDestinatario=isset($_POST['nomeDestinatario'])?$DbSite->quote($_POST['nomeDestinatario']):'';
		$parentesco=isset($_POST['parentesco'])?$DbSite->quote($_POST['parentesco']):'';
		$ruaDestinatario=isset($_POST['ruaDestinatario'])?$DbSite->quote($_POST['ruaDestinatario']):'';

		$bairroDestinatario=isset($_POST['bairroDestinatario'])?$DbSite->quote($_POST['bairroDestinatario']):'';
		$localidadeDestinatario=isset($_POST['localidadeDestinatario'])?$DbSite->quote($_POST['localidadeDestinatario']):'';
		$provinciaDestinatario=isset($_POST['provinciaDestinatario'])?$DbSite->quote($_POST['provinciaDestinatario']):'';
		$paisDestinatario=isset($_POST['paisDestinatario'])?$DbSite->quote($_POST['paisDestinatario']):'';

		$telefoneDestinatario=isset($_POST['telefoneDestinatario'])?$DbSite->quote($_POST['telefoneDestinatario']):'';
		$telemovelDestinatario=isset($_POST['telemovelDestinatario'])?$DbSite->quote($_POST['telemovelDestinatario']):'';

		$sql="
		insert into site.destinatario
		(idDestinatario,idUtilizador,accao,nome,rua,bairro,cidade,provincia,pais,telefone,telemovel,parentesco)
		value (".$destinatario.','.$idUtilizador.",'actualizar',$nomeDestinatario,$ruaDestinatario,$bairroDestinatario,$localidadeDestinatario,$provinciaDestinatario,$paisDestinatario,$telefoneDestinatario,$telemovelDestinatario,$parentesco);";
		if($DbSite->query($sql)){
			return true;
		}else{
			return false;
		}
	}
	public static function getPedidoDeAlteracaoDeDadosPessoais(){
		return self::$pedidoDeAlteracaoDeDadosPessoais;
	}
	public static function getPedidoDeAlteracaoDeMorada(){
		return self::$pedidoDeAlteracaoDeMorada;
	}
	public static function getPedidoDeDocumentos(){
		return self::$pedidoDeAlteracaoDeDocumentos;
	}
	public function uploadDocumentos(){

		if((!empty($_FILES["uploaded_file"]))&&($_FILES['uploaded_file']['error']==0)){
			$filename=basename($_FILES['uploaded_file']['name']);
			$ext=substr($filename,strrpos($filename,'.')+1);
			$path=substr(dirname(__FILE__),0,-7).'/documentos/'.$this->id.'/';
			$newname=$path.$filename;
			if(!file_exists($path)){ mkdir($path,0777);}
			if((move_uploaded_file($_FILES['uploaded_file']['tmp_name'],$newname))){
				return true;
			}else{
			}
		}else{
		}
		return false;
	}
	public static function uploadDocumentosStatic($numero){

		if((!empty($_FILES["uploaded_file"]))&&($_FILES['uploaded_file']['error']==0)){
			$filename=basename($_FILES['uploaded_file']['name']);
			$ext=substr($filename,strrpos($filename,'.')+1);
			$path=substr(dirname(__FILE__),0,-7).'/upload/'.$numero.'/';
			$newname=$path.$filename;
			if(!file_exists($path)){ mkdir($path,0777);}
			if((move_uploaded_file($_FILES['uploaded_file']['tmp_name'],$newname))){
				return true;
			}else{
			}
		}else{
		}
		return false;
	}
	public static function saveDocumentos(){
		global $DbSite;
		$actividade=isset($_POST['actividade'])?$DbSite->quote($_POST['actividade']):'';
		$meioDeConhecimento=isset($_POST['meioDeConhecimento'])?$DbSite->quote($_POST['meioDeConhecimento']):'';
		$escolaridade=isset($_POST['escolaridade'])?$DbSite->quote($_POST['escolaridade']):'';
		$estadoCivil=isset($_POST['estadoCivil'])?$DbSite->quote($_POST['estadoCivil']):'';
		$valorMensal=isset($_POST['valorMensal'])?$DbSite->quote($_POST['valorMensal']):'';
		$origemVencimento=isset($_POST['origemVencimento'])?$DbSite->quote($_POST['origemVencimento']):'';
		$referenciaVencimento=isset($_POST['referenciaVencimento'])?$DbSite->quote($_POST['referenciaVencimento']):'';
		$tipo=isset($_POST['tipo'])?$DbSite->quote($_POST['tipo']):'';
		$numero=isset($_POST['numero'])?$DbSite->quote($_POST['numero']):'';
		$dataDeEmissao=isset($_POST['dataDeEmissao'])?$DbSite->quote($_POST['dataDeEmissao']):'';
		$dataDeCaducidade=isset($_POST['dataDeCaducidade'])?$DbSite->quote($_POST['dataDeCaducidade']):'';
		$orgaoRegisto=isset($_POST['orgaoRegisto'])?$DbSite->quote($_POST['orgaoRegisto']):'';
		$date=$DbSite->quote(date('Y-m-d H:i:s'));
		$sql="
		  insert into site.documentos(actividade,meioDeConhecimento,escolaridade,estadoCivil,valorMensal,origemVencimento,referenciaVencimento,tipo,numero,dataDeEmissao,dataDeCaducidade,orgaoRegisto,data)
		  values(".$actividade.",".$meioDeConhecimento.",".$escolaridade.",".$estadoCivil.",".$valorMensal.",".$origemVencimento.",".$referenciaVencimento.",".$tipo.",".$numero.",".$dataDeEmissao.",".$dataDeCaducidade.",".$orgaoRegisto.",".$date.");";
		if($DbSite->query($sql)){
			self::$pedidoDeAlteracaoDeDocumentos=true;
			return true;
		}else{
			return false;
		}
	}
	public static function saveMorada(){
		global $DbSite;
		$rua=$DbSite->quote($_POST['rua']);
		$porta=$DbSite->quote($_POST['porta']);
		$piso=$DbSite->quote($_POST['piso']);
		$provincia=$DbSite->quote($_POST['provincia']);
		$concelho=$DbSite->quote($_POST['concelho']);
		$codigoPostal=$DbSite->quote($_POST['codigoPostal']);
		$localidade=$DbSite->quote($_POST['localidade']);
		$nacionalidade=$DbSite->quote($_POST['nacionalidade']);
		$naturalidade1=$DbSite->quote($_POST['naturalidade1']);
		$naturalidade2=$DbSite->quote($_POST['naturalidade2']);
		$pais=$DbSite->quote($_POST['pais']);

		$date=$DbSite->quote(date('Y-m-d H:i:s'));
		$sql="
		insert into site.morada(rua,porta,piso,provincia,concelho,codigoPostal,localidade,nacionalidade,naturalidade1,naturalidade2,pais,data)
		values(".$rua.",".$porta.",".$piso.",".$provincia.",".$concelho.",".$codigoPostal.",".$localidade.",".$nacionalidade.",".$naturalidade1.",".$naturalidade2.",".$pais.",".$date.");";
		if($DbSite->query($sql)){
			self::$pedidoDeAlteracaoDeMorada=true;
			return true;
		}else{
			return false;
		}
	}
	public static function saveDadosPessoais(){
		global $DbSite;
		$nome=$DbSite->quote($_POST['nome']);
		$dataDeNascimentoDia=$_POST['dataDeNascimentoDia'];
		$dataDeNascimentoMes=$_POST['dataDeNascimentoMes'];
		$dataDeNascimentoAno=$_POST['dataDeNascimentoAno'];
		$sexo=$DbSite->quote($_POST['sexo']);
		$telefone=$DbSite->quote($_POST['telefone']);
		$telemovel=$DbSite->quote($_POST['telemovel']);
		$email=$DbSite->quote($_POST['email']);
		$newsletter=isset($_POST['newsletter'])?$DbSite->quote($_POST['newsletter']):0;
		$dataDeNascimento=$DbSite->quote(date("$dataDeNascimentoAno-$dataDeNascimentoMes-$dataDeNascimentoDia"));

		$date=$DbSite->quote(date('Y-m-d H:i:s'));
		$sql="
		insert into site.dadosPessoais(nome,dataDeNascimento,sexo,telefone,telemovel,email,newsletter,data)
		values(".$nome.",".$dataDeNascimento.",".$sexo.",".$telefone.",".$telemovel.",".$email.",".$newsletter.",".$date.");";
		if($DbSite->query($sql)){
			self::$pedidoDeAlteracaoDeDadosPessoais=true;
			return true;
		}else{
			return false;
		}
	}
	public function getParentescos(){
		if(!isset($parentescos)){
			global $DbTuga;
			$sql='select
			hf_systypes.stpID as id,
			hf_systypes.stpName as parantesco
			from hf_systypes
			where hf_systypes.stpGroup=3;';
			$result=$DbTuga->getall($sql);
			$this->parentescos=$result;
		}
		return $this->parentescos;
	}
	public function getDados(){
		global $DbTuga;
		if(!isset($dados)){
			$sql='
			select
			officeschema.clientes.CliNombre as nome
			,officeschema.clientes.CliMap as sexo
			,officeschema.clientes.CliTipoDOC as tipoDocumento
			,officeschema.clientes.CliDNI as numeroDocumento
			,officeschema.hd_documentos.dtd_FechaEmision as dataDeEmissao
			,officeschema.hd_documentos.dtd_FechaCaducidad as dataDeCaducidade
			,officeschema.clientes.CliDomicilio as rua
			,officeschema.clientes.CliPortal as porta
			,officeschema.clientes.CliPisoPuerta as piso
			,officeschema.clientes.CliCiudad as concelho
			,officeschema.clientes.CliCP as codigoPostal
			,officeschema.clientes.CliProvincia as provincia
			,officeschema.clientes.CliLocation as localidade
			,officeschema.clientes.ClPais as pais
			,officeschema.clientes.CliTelefono as telefone
			,officeschema.clientes.CliTelefono2 as telemovel
			,officeschema.clientes.CliFechaNacimiento as dataDeNascimento
			,officeschema.clientes.CliNacionalidad as nacionalidade
			,officeschema.clientes.CliRes1 as naturalidade1
			,officeschema.clientes.CliRes2 as naturalidade2
			,officeschema.clientes.CliActividad as actividade
			,officeschema.clientes.CLCttEmail as email
			,officeschema.clientes.CliEstadoCivil as estadoCivil
			,
			officeschema.clientes.* , officeschema.hd_documentos.*
			from officeschema.clientes
			join officeschema.hd_documentos on officeschema.hd_documentos.dtd_Cliente=officeschema.clientes.CliNumero
			where officeschema.clientes.CliNumero='.$this->id;
			$result=$DbTuga->getall($sql);
			$this->dados=$result[0];
		}
		return $this->dados;
	}
	public function getDataDeNascimento(){
		global $DbTuga;
		if(!isset($dataDeNascimento)){
			$sql='
			select officeschema.clientes.CliFechaNacimiento as dataDeNascimento from site.utilizador
			join officeschema.clientes on officeschema.clientes.CliNumero=site.utilizador.id
			where site.utilizador.id='.$this->id;
			$result=$DbTuga->getall($sql);
			$this->dataDeNascimento=$result[0]->dataDeNascimento;
		}
		return $this->dataDeNascimento;
	}
	public function getNome(){
		global $DbTuga;
		if(!isset($nome)){
			$sql='
			select clinombre as nome from clientes
			where clinumero='.$this->id;
			$result=$DbTuga->getall($sql);
			$this->nome=$result[0]->nome;
		}
		return $this->nome;
	}
	public static function getInstance(){
		if(!(self::$_instance instanceof self)){
			self::$_instance=new self();
		}
		return self::$_instance;
	}
	// Do not allow an explicit call of the constructor: $v = new Singleton();
	final private function __construct(){

	}
	// Do not allow the clone operation: $x = clone $v;
	final private function __clone(){

	}
	function getlogado(){
		return $this->logado;
	}
	public function utilizador($nome,$pass){
		$this->nome=$nome;
		$this->pass=$pass;
	}
	function getId(){
		return $this->id;
	}
	/* Cria uma nova sessaõ para o utlizador que existe na base de dados
	 * */
	function check_user($nome,$pass){
		global $DbSite;
		$sql='SELECT * FROM site.utilizador WHERE email='.$nome.' AND password='.$pass;
		$result=$DbSite->getall($sql);
		if(count($result)==1){
			$this->id=$result[0]->CliNumero;
			$this->nome=$result[0]->email;
			$this->pass=$result[0]->password;
			$this->cookie=$_COOKIE['moneyexpress'];
			$this->logado=true;
			return true;
		}else{
			die('não encontrou o utilzador na base de dados');
			return false;
		}
	}
}